﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TCC_Hotel.Serviços.BDServices;
using TCC_Hotel.Serviços;
using TCC_Hotel.Entidades;
using TCC_Hotel.Serviços.OtherServices;
using TCC_Hotel.Entidades.Basicas;

namespace TCC_Hotel.Apresentacao.Empresas
{
    public partial class EditarEmpresa : System.Web.UI.Page
    {

        WebServices servicos = new WebServices();
        GeralServices geral = null;
        EmpresaService servico = new EmpresaService();
       
        string CNPJ = null;


        /// <summary>
        /// Carregamento da página
        /// </summary>
        protected void Page_Load(object sender, EventArgs e)
        {
            //Recupera o usuario corrente
            string usuario = Request.ServerVariables["AUTH_USER"].ToString();

            LoginService servico_Login = new LoginService();
            //Verifica permissao ao acesso da página
            if (!servico_Login.RecuperarPermissaoCache(usuario).Cadastrar_Empresas)
            {
                //Redireciona para a pagina inicial
                Response.Redirect("~/");
            }

            if (!IsPostBack)
            {
                geral = new GeralServices();
                //popular o dropdown estados
                ddlEstado.DataSource = geral.GetEstados();
                ddlEstado.DataTextField = "nome";
                ddlEstado.DataValueField = "sigla";
                ddlEstado.DataBind();

                //São Paulo será o estado default
                ddlEstado.SelectedValue = "SP";


                if (Request.Params["cnpj"] == null)
                {
                    //Redireciona para a pagina inicial
                    Response.Redirect("~/");
                }

                //Recupera o parametro da URL
                CNPJ = Request.Params["cnpj"];

                EmpresaService servico = new EmpresaService();

                //chama o serviço que busca no banco de dados a empresa correspondente
                Empresa empresa = servico.RecuperarDetalhesEmpresa(CNPJ);

                //Monta o formulario para o usuario
                if (empresa != null)
                {
                    txtNomeEmpresa.Text = empresa.Nome;
                    txtResponsavel.Text = empresa.NomeResponsavel;                   
                    txtCNPJ.Text = empresa.CNPJ;
                    ckbFaturamento.Checked = empresa.AutorizadoFatura;


                    //Verifica se é não null para não gerar exceção
                    if (!String.IsNullOrEmpty(empresa.Contato.Telefone[0]))
                    {
                        txtDDDTelefone1.Text = empresa.Contato.Telefone[0].Substring(0, 2);
                        txtTelefone1.Text = empresa.Contato.Telefone[0].Substring(2);
                    }

                    //Verifica se é não null para não gerar exceção
                    if (!String.IsNullOrEmpty(empresa.Contato.Telefone[1]))
                    {
                        txtDDDTelefone2.Text = empresa.Contato.Telefone[1].Substring(0, 2);
                        txtTelefone2.Text = empresa.Contato.Telefone[1].Substring(2);
                    }

                    //Verifica se é não null para não gerar exceção
                    if (!String.IsNullOrEmpty(empresa.Contato.Celular[1]))
                    {
                        txtDDDCelular2.Text = empresa.Contato.Celular[1].Substring(0, 2);
                        txtCelular2.Text = empresa.Contato.Celular[1].Substring(2);
                    }

                    //Verifica se é não null para não gerar exceção
                    if (!String.IsNullOrEmpty(empresa.Contato.Celular[0]))
                    {
                        txtDDDCelular1.Text = empresa.Contato.Celular[0].Substring(0, 2);
                        txtCelular1.Text = empresa.Contato.Celular[0].Substring(2);
                    }

                    txtEmail.Text = empresa.Contato.Email;
                    txtLogradouro.Text = empresa.Endereco.Logradouro;
                    txtBairro.Text = empresa.Endereco.Bairro;
                    txtCEP.Text = empresa.Endereco.CEP;
                    txtNumero.Text = Convert.ToString(empresa.Endereco.Numero);
                    txtCidade.Text = empresa.Endereco.Cidade;
                    ddlEstado.SelectedValue = empresa.Endereco.Estado.sigla;
                    txtComplemento.Text = empresa.Endereco.Complemento;
                    

                }
            }
        }

        /// <summary>
        /// Tenta salvar a empresa no banco de dados
        /// </summary>
        protected void btnSalvar_Click(object sender, EventArgs e)
        {
            
            //Recupera o parametro da URL
            CNPJ = Request.Params["cnpj"];

            ComumServices comum = new ComumServices();

            //preenche a lista obrigatoria para verificar se todos os campos obrigatorios fora preenchidos
            List<string> listaObrigatoria = new List<string>() 
            { 
                txtNomeEmpresa.Text.Trim(),
                txtResponsavel.Text.Trim(),
                txtLogradouro.Text.Trim(),
                txtBairro.Text.Trim(),
                txtCEP.Text,
                txtCidade.Text.Trim(),
                txtNumero.Text,
                txtEmail.Text.Trim(),
                txtCNPJ.Text   
            };



            //Verifica se algum campo obrigatório nao foi preenchido
            if (!comum.ValidaCamposObrigatorios(listaObrigatoria))
            {
                MensagemJS("ERRO: Campo(s) obrigatório(s) em branco");
                return;
            }
            

            //Faz validação do CNPJ
            if (!servico.ValidaCNPJ(txtCNPJ.Text))
            {
                MensagemJS("ERRO: CNPJ digitado não é válido");
                return;
            }



            //Faz validação dos telefones
            List<string> DDDs = new List<string>();
            List<string> Telefones = new List<string>();

            Telefones.Add(txtCelular1.Text);
            Telefones.Add(txtCelular2.Text);
            Telefones.Add(txtTelefone1.Text);
            Telefones.Add(txtTelefone2.Text);

            DDDs.Add(txtDDDCelular1.Text);
            DDDs.Add(txtDDDCelular2.Text);
            DDDs.Add(txtDDDTelefone1.Text);
            DDDs.Add(txtDDDTelefone2.Text);


            if (!comum.ValidaTelefones(DDDs, Telefones))
            {
                MensagemJS("ERRO: Telefones digitados não são válidos");
                return;
            }

            //monta o objeto empresa
            try
            {
                Empresa empresa = new Empresa()
                {
                    Nome = txtNomeEmpresa.Text.Trim(),
                    NomeResponsavel = txtResponsavel.Text.Trim(),
                    Contato = new Contato()
                    {

                        Celular = new List<string>() { (txtDDDCelular1.Text + txtCelular1.Text), (txtDDDCelular2.Text + txtCelular2.Text) },
                        Telefone = new List<string>() { (txtDDDTelefone1.Text + txtTelefone1.Text), (txtDDDTelefone2.Text + txtTelefone2.Text) },
                        Email = txtEmail.Text

                    },
                    Endereco = new Endereco()
                    {
                        Logradouro = txtLogradouro.Text.Trim(),
                        Bairro = txtBairro.Text.Trim(),
                        CEP = txtCEP.Text,
                        Cidade = txtCidade.Text.Trim(),
                        Complemento = txtComplemento.Text.Trim(),
                        Estado = new Estado() { nome = ddlEstado.SelectedItem.Text, sigla = ddlEstado.SelectedValue },
                        Numero = Convert.ToInt32(txtNumero.Text)
                    },

                    CNPJ = txtCNPJ.Text,
                    AutorizadoFatura = ckbFaturamento.Checked

                };

                //chama o serviço que insere a empresa no banco de dados
                if (servico.EditarEmpresa(CNPJ, empresa))
                {
                    MensagemJS("Empresa editada com sucesso!");
                    HttpContext.Current.Cache.Remove("Lista_Empresa");
                }
                else
                {
                    MensagemJS("ERRO: Empresa com esse CNPJ já existente");
                    return;
                }

            }
            catch (Exception)
            {
                //se ocorrer exceção lanca mensagem para o usuário
                MensagemJS("ERRO: Campo(s) com valor(es) inválido(s)");
                return;

            }


        }

        /// <summary>
        /// Limpa todos os campos
        /// </summary>
        protected void btnLimpar_Click(object sender, EventArgs e)
        {
            txtNomeEmpresa.Text = null;
            txtCNPJ.Text = null;
            txtResponsavel.Text = null;
            txtDDDCelular1.Text = null;
            txtDDDCelular2.Text = null;
            txtDDDTelefone1.Text = null;
            txtDDDTelefone2.Text = null;
            txtCelular1.Text = null;
            txtTelefone1.Text = null;
            txtCelular2.Text = null;
            txtEmail.Text = null;
            txtTelefone2.Text = null;
            txtLogradouro.Text = null;
            txtBairro.Text = null;
            txtComplemento.Text = null;
            txtCEP.Text = null;
            txtCidade.Text = null;
            txtNumero.Text = null;

        }

        protected void btnBuscaCEP_Click(object sender, EventArgs e)
        {
            //Chama o serviço que faz essa busca
            Endereco endereco = servicos.GetEnderecoPorCEP(txtCEP.Text);

            //Preenche os textbox com o endereço correspondente
            txtBairro.Text = endereco.Bairro;
            txtLogradouro.Text = endereco.Logradouro;
            txtCidade.Text = endereco.Cidade;

            if (!String.IsNullOrEmpty(endereco.Estado.sigla))
                ddlEstado.SelectedValue = endereco.Estado.sigla;
        }

        /// <summary>
        /// Evento de click do botao voltar 
        /// </summary>
        protected void btnVoltar_Click(object sender, EventArgs e)
        {
            //Redireciona para a pagina anterior
            Response.Redirect("~/Apresentacao/Empresas/ListarEmpresas.aspx");

        }

        /// <summary>
        /// Lança um popup em javaScript com alguma mensagem
        /// </summary>
        /// <param name="msg">Mensagem do popup</param>
        public void MensagemJS(string msg)
        {
            //Formata um alert para o usuário
            Page.ClientScript.RegisterStartupScript(

                     this.GetType(),

                     "error",

                     "$(window).load(function(){alert('" + msg + "')});",

                     true);

        }
    }
}